Applications are installed on a continuously increasing set of devices including, but not limited to smartphones, tablets, laptops, televisions, cars, watches, etc. As a consequence, those applications must be continuously updated to best accommodate all of such heterogeneous devices, including new devices emerging on the market, in order to offer an adapted and optimal user experience, as well as obtain a high level of adoption. Unfortunately, such updates may actually alter a user experience on some devices, by introducing unexpected side-effects, due to the wide variety of characteristics of those devices [e.g. hardware, screen size, operating system (including version), application program interfaces (APIs), network conditions, etc.]. This forces developers and testers to validate a huge and still growing range of devices before every deployment, without any information on aspects of the devices which are currently impacted or even a list of devices, and their characteristics, which are in use by end-users of the application.
For example, one widely-adopted update strategy currently consists of publishing all application updates to all targeted devices, including devices in which the code of the application is defined to not activate a corresponding relevant function. This introduces unnecessary risk by propagating side-effects on devices in which it makes no positive impact, or even devices that were better supported before the update was provided.